<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <script>


        // 默认情况下，this指向window
        // 事件处理函数中，this指向事件源
        // 对象中，this指向对象自己

        //   函数里面嵌套函数时，this指向会发生改变    把this保存在变量中


        console.log(this);  // window 

        function fn() {
            console.log(this);  // window
        }

        window.fn()

        document.addEventListener('click' , function() {
            console.log(this);   // document

            // const that = this ;
            const _this = this ;

            setTimeout(function(){
                console.log(_this);   // window
            } , 100)
        })

        // 严格模式下，普通函数没有this指向(undefined)


        const obj = {
            name : '小花' ,
            age : 17 ,
            say : function() {
                console.log(this);   // obj
                console.log( 'hello my name is ' + this.name);
                const _this = this ;   // 把this存在变量_this中
                setTimeout(function() {
                    console.log(this);  // window
                    console.log( 'hello my age is ' + _this.age);
                } , 100)
            }
        }

        obj.say() ;


        setTimeout(function(){
            console.log(this);   // window
        } , 100)

    </script>
    
</body>
</html>